package visiopuce.service.document;

import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.hibernate.HibernateException;

import visiopuce.ApplicationContexte;
import visiopuce.objets.Analyse;
import visiopuce.objets.Cotation;
import visiopuce.objets.Personne;
import visiopuce.objets.Prelevement;
import visiopuce.objets.Resultat;
import visiopuce.objets.Utilisateur;
import visiopuce.service.AnalyseServiceImpl;
import visiopuce.service.CotationServiceImpl;
import visiopuce.service.PersonneServiceImpl;
import visiopuce.service.PrelevementServiceImpl;
import visiopuce.service.ResultatServiceImpl;
import visiopuce.service.UtilisateurServiceImpl;

public class FeuilleCotationCSV {

	public void createDocument() {
		try {
			// String[] cotationcytoS = { "A9005", "A9105", "AN200", "AN206",
			// "A0901", "AB027", "AB046", "AB047", "A0903", "A0904", "A0905",
			// "AB023", "AB036", "AN207", "AB011", "AB015", "AB018", "AB026",
			// "AB029", "AB030", "AB031", "AB037", "AB038", "AN103" };
			// String[] cotationcytoLA = { "A9005", "AN200", "AN206", "A0041",
			// "A4031", "AB047", "AQ012", "AQ020", "A0903", "A0904", "A0905",
			// "AB023", "AB036", "AN207", "A0040", "AB002", "AB004", "AB046",
			// "AB003", "AB026", "AB029", "AB030", "AB031", "AB037", "AB038" };
			// String[] cotationcytoVC = { "A9005", "AN200", "AN206", "A0040",
			// "A0041", "A4031", "AB001", "AB047", "AQ012", "A0903", "A0904",
			// "A0905", "AB023", "AB036", "AN207", "AB002", "AB003", "AB004",
			// "AB046", "AQ020", "AB026", "AB029", "AB030", "AB031", "AB037",
			// "AB038" };
			// String[] cotationcytoF = { "A9005", "A9105", "AN200", "AN206",
			// "A0902", "AB046", "AB047", "AB027", "A0903", "A0904", "A0905",
			// "AB023", "AN207", "AB015", "AB002", "AB004", "AQ020", "AB026",
			// "AB036", "AB029", "AB030", "AB031", "AB037", "AB038", "A4031" };
			// String[] cotationcytoSF = { "A9005", "A9105", "AN200", "AN206",
			// "A0902", "AB046", "AB047", "A0903", "A0904", "A0905", "AB023",
			// "AN207", "AB011", "AB015", "AB018", "AB027", "A0040", "A0041",
			// "AB002", "AB003", "AB026", "AB036", "AB029", "AB030", "AB031",
			// "A4037", "A4038" };
			// String[] cotationpuceP = { "A9005", "A9105", "AN200", "AN206",
			// "AQ043" };
			// String[] cotationpuceA = { "A9005", "A9105", "AN200", "AQ002",
			// "AQ003", "AQ901", "AN923", "AQ048", "AN018", "AN014", "AB034",
			// "AN211", "AN215", "AN216", "AB050", "AN207", "A0904", "AB023",
			// "AB037", "AB037", "AN317", "AN308", "AN309", "AN927", "AN928",
			// "AN929", "AN930", "A0905" };

			Date d = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("dd_MM_yyyy");
			PrintWriter pWriter = new PrintWriter(new FileWriter(ApplicationContexte.REPERTOIRE_COTATION + sdf.format(d) + "_activiteTotalCyto.csv", true));

			SimpleDateFormat formatterFR = new SimpleDateFormat("dd/MM/yyyy");

		//	String titre = "Date_de_reception;Numero;UF_demandeur;UF_executant;Signataire;N_Hospitalisation;Code_Acte;Date_Acte;Type_B;Nb_B;;\r\n";
			String titre = "Date_de_reception;Numero;UF_demandeur;UF_executant;Signataire;N_Hospitalisation;Code_Acte;Date_Acte;;\r\n";

			pWriter.print(titre);

			Calendar c = Calendar.getInstance();
			c.setTime(d);
			int year = c.get(Calendar.YEAR);

			List<Cotation> cota = CotationServiceImpl.getInstance().getCotationByAnnee(year);
			if (cota.size() > 0) {
				if (cota != null && cota.size() >= 1) {
					for (Cotation cotation2 : cota) {
						String ligne = "";
						if (cotation2.getDate() != null) {
							String dateCot = "";
							dateCot = formatterFR.format(cotation2.getDate()) + " ";
							Prelevement prel = null;
							Personne per = null;
							Analyse ana = null;
							String ufExec = null;
							String ufPresc = null;
							String signataire = null;

							if (cotation2.getPersonne() != null) {
								per = PersonneServiceImpl.getInstance().getPersonneById(cotation2.getPersonne().getIdPersonne());
							}
							if (cotation2.getPrelevement() != null) {
								prel = PrelevementServiceImpl.getInstance().getPrelevementById(cotation2.getPrelevement().getIdPrelevement());
							}
							if (cotation2.getAnalyse() != null) {
								ana = AnalyseServiceImpl.getInstance().getAnalyseByIdAnalyse(cotation2.getAnalyse().getIdAnalyse());
							}

							if ((per == null || prel == null) && ana != null) {
								prel = PrelevementServiceImpl.getInstance().getPrelevementById(ana.getPrelevement().getIdPrelevement());
								if (prel != null) {
									per = PersonneServiceImpl.getInstance().getPersonneById(prel.getPersonne().getIdPersonne());
								}
							}
							if (prel != null && !prel.getNumeroPrelevement().contains("non reçu")) {
								if (per == null && prel != null) {
									per = PersonneServiceImpl.getInstance().getPersonneById(prel.getPersonne().getIdPersonne());
								}
								if (prel != null) {
									// List<Analyse> lAnalyses =
									// AnalyseServiceImpl.getInstance().findAllByidPrelevement(prel.getIdPrelevement());
									// if (lAnalyses == null || lAnalyses.size()
									// == 0) {
									// System.out.println("Pas d'analyse :" +
									// cotation2);
									// } else {
									// for (Analyse analyse : lAnalyses) {
									// if (analyse.getUfPresc() != null) {
									// ufPresc =
									// analyse.getUfPresc().toString();
									// break;
									// }
									// }
									// }
									if (prel.getUfPresc() != null) {
										ufPresc = prel.getUfPresc().toString();
									} else {
										List<Prelevement> prelevements = PrelevementServiceImpl.getInstance().getAutrePrelevementFromPatient(prel);
										for (Prelevement prelevement : prelevements) {
											if (prelevement.getUfPresc() != null) {
												ufPresc = prelevement.getUfPresc().toString();
												break;
											}
										}
									}
								}

								if (per == null || prel == null) {
									if (per == null) {
										ligne += "Pas de personne :" + cotation2;
									}
									if (prel == null) {
										ligne += "Pas de prelèvement :" + cotation2;
									}

								} else {

									// ufPresc

									if (ana != null) {
										if (ufExec == null) {
											ufExec = ana.getUfExec().toString();
										}
									}

									// if (ufPresc == null) {
									// List<Analyse> lAnalyses =
									// AnalyseServiceImpl.getInstance().findAllByidPersonne(per.getIdPersonne());
									// if (lAnalyses == null || lAnalyses.size()
									// == 0) {
									// System.out.println("Pas d'analyse :" +
									// cotation2);
									// } else {
									// for (Analyse analyse : lAnalyses) {
									// if (analyse.getUfPresc() != null) {
									// ufPresc =
									// analyse.getUfPresc().toString();
									// break;
									// }
									// }
									// }
									// }

									if (ufPresc == null) {
										String infoIndi = prel.getInfoIndication();
										if (infoIndi != null && infoIndi.contains("xtraction") || prel.getTypePrelevement().getLibelle().contains("Culot")) {
											ufPresc = "4270";
										} else {
											ufPresc = "0";
										}
									}

									if (ufPresc != null && ufPresc.length() == 3) {
										ufPresc = "0" + ufPresc;
									}
									if (ufPresc != null && ufPresc == "9999") {
										if (prel.getPrescripteur() != null) {
											Utilisateur prescripteur = UtilisateurServiceImpl.getInstance().getUtilisateurById(prel.getPrescripteur().getIdUtilisateur());
											if (prescripteur.getNom().equals("Puechberty") || prescripteur.getNom().equals("Sarda") || prescripteur.getNom().equals("Geneviève") || prescripteur.getNom().equals("Bigi") || prescripteur.getNom().equals("Blanchet")
													|| prescripteur.getNom().equals("Coubes") || prescripteur.getNom().equals("Pinson") || prescripteur.getNom().equals("Perez") || prescripteur.getNom().equals("Willems")) {
												ufPresc = "4270";
											} else {
												ufPresc = "9990";
											}
										}
										ufPresc = "9990";
									}
									// Signataire
									if (ana != null) {
										List<Resultat> resultats = ResultatServiceImpl.getInstance().findAllByidAnalyse(ana.getIdAnalyse());
										for (Resultat resultat : resultats) {
											// signataire
											if (resultat.getSignataire() != null && signataire == null) {
												if (resultat.getSignataire().getIdUtilisateur() == 7) {
													signataire = "01300393";
													break;
												}
												if (resultat.getSignataire().getIdUtilisateur() == 9) {
													signataire = "01016924";
													break;
												}
												if (resultat.getSignataire().getIdUtilisateur() == 25) {
													signataire = "01060020";
													break;
												}
												if (resultat.getSignataire().getIdUtilisateur() == 26) {
													signataire = "01066809";
													break;
												}
												if (resultat.getSignataire().getIdUtilisateur() == 27) {
													signataire = "01069590";
													break;
												}
												if (resultat.getSignataire().getIdUtilisateur() == 2) {
													signataire = "01243551";
													break;
												}
											}
										}
									}

									if (ufExec == null) {
										if (prel.getSecteur() != null) {
											if (prel.getSecteur().getLibelle().equals(ApplicationContexte.SECTEUR_PRENATAL) || prel.getSecteur().getLibelle().equals(ApplicationContexte.SECTEUR_POSTNATAL) || prel.getSecteur().getLibelle().equals(ApplicationContexte.SECTEUR_FOETO)) {
												ufExec = "4076";
												if (signataire == null) {
													signataire = "01066809";
												}
											}
											if (prel.getSecteur().getLibelle().equals(ApplicationContexte.SECTEUR_PUCE_PRENATAL) || prel.getSecteur().getLibelle().equals(ApplicationContexte.SECTEUR_PUCE_POSTNATAL) || prel.getSecteur().getLibelle().equals(ApplicationContexte.SECTEUR_PUCE_FOETO)) {
												ufExec = "4274";
												if (signataire == null) {
													signataire = "01300393";
												}
											}
											if (prel.getSecteur().getLibelle().equals(ApplicationContexte.SECTEUR_CELLULES)) {
												ufExec = "4252";
												if (signataire == null) {
													signataire = "01066809";
												}
											}
											if (prel.getSecteur().getLibelle().equals(ApplicationContexte.SECTEUR_BANQUE)) {
												ufExec = "4273";
												if (signataire == null) {
													signataire = "01300393";
												}
												if (ufPresc == null || ufPresc == "0") {
													ufPresc = "4270";
												}
											}
										}
									}
									if (signataire == null) {
										signataire = "01066809";
									}

									String date_reception = "Non rentrée";
									if (prel.getDateReception() != null) {
										date_reception = formatterFR.format(prel.getDateReception());
									} else {
										if (prel.getDatePrelevement() != null) {
											date_reception = formatterFR.format(prel.getDatePrelevement());
										}
									}
									List<String> nonTermines = PrelevementServiceImpl.getInstance().getNumSejourNonTermine();
									if (!nonTermines.contains(prel.getNumSejour())) {
										ligne += date_reception + ";" + prel.getNumeroPrelevement() + ";" + ufPresc + ";" + ufExec + ";" + signataire + ";" + prel.getNumSejour() + ";" + cotation2.getTypeCotation().getLibelle().substring(1) + ";" + dateCot + ";" + cotation2.getTypeCotation().getTypeB() + ";"
												+ cotation2.getTypeCotation().getQuantite() + ";;";
										cotation2.setEnvoyer(true);
										CotationServiceImpl.getInstance().save(cotation2);
										if (prel.getCotationEnvoye() != 2) {
											prel.setCotationEnvoye(2);
											PrelevementServiceImpl.getInstance().save(prel);
										}
									}
									// System.out.println("Ligne :" + ligne);

								}
								pWriter.println(ligne);
							}
							if (prel == null) {
								ligne += "Pas de prelèvement :" + cotation2;
							}
						}

					}
				}
			}

			pWriter.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (HibernateException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
